package leetcode.interviewClassics;

import java.util.HashSet;
import java.util.Set;

/**
 * @author Cheng Jun
 * Description:
 * 给定一个字符串，编写一个函数判定其是否为某个回文串的排列之一。
 * 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
 * 回文串不一定是字典当中的单词。
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/palindrome-permutation-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @version 1.0
 * @date 2021/10/29 21:34
 */
public class canPermutePalindrome {

    public static void main(String[] args) {
        System.out.println(canPermutePalindrome("abcabcde"));
    }

    // 思路：判断字母出现的次数 是不是偶数次
    // 最多只能一个 字母出现的次数不是偶数次
    static boolean canPermutePalindrome(String s) {
        Set<String> set = new HashSet<>();
        // 不要用 split 方法，浪费性能，最好用 s.toCharArray()
        for (String str : s.split("")) {
            if (set.contains(str)) {
                set.remove(str);
            } else {
                set.add(str);
            }
        }
        if (set.size() <= 1) {
            return true;
        } else {
            return false;
        }
    }
}
